<?php

namespace app\admin\controller;

use app\admin\service\Rbac;
use app\common\controller\Send;
use think\Controller;
use think\facade\Session;

class Base extends Controller
{
    use Send;

    // 定义需要排除的权限路由
    protected $noAuthRoute = [
        // 首页
        'admin/index/index',
        // 登录页面
        'admin/login/index',
        // 退出页面
        'admin/index/logout',
        'admin/oauth/updateset',
        'admin/oauth/updatenote'
    ];

    protected $loginNoAuth = [
        // 登录页面
        'admin/login/index',
    ];

    // 不用验证权限的账号id
    protected $noAuthAdmin;

    public function initialize()
    {
        // 不需要权限的账号
        $this->noAuthAdmin = config('noAuthAdmin');
        // 权限验证
        $this->check();
    }

    /**
     * 权限验证
     */
    public function check()
    {
        // 获取当前访问的路由
        $url = get_current_url();

        // 判断是否已经登录，未登录跳到登录
        if (empty($sessionUid = Session::get('session_admin_id')) && !in_array($url, $this->loginNoAuth)) {
            $this->error('请先登录', 'login/index');
        }

        if (!in_array($sessionUid, $this->noAuthAdmin) && !in_array($url, $this->noAuthRoute)) {
            $rbac = new Rbac();
            // 判断是否能访问
            $return = $rbac->can($url);

            if ($return['code'] != self::$okCode) {
                if ($return['msg'] == '您的登录信息已过期请重新登录') {
                    return redirect('login/index');
                } else {
                    $this->error($return['msg']);
                }
            }
        }
    }
}